package teach;

public class Polymorphic {
    public static void main(String[] args) {
        //向下转型的本质：是先向上造型。
        //多态，永远不可能转换为比对象小的类型


        //向上造型/自动类型转换----------看的是前面
        //能点出来什么，看引用的类型

        //向下转型/强制类型转换---------看的是对象，即后面
        //引用所指向的对象，就是该类型
        //引用所指向的对象，实现了该接口或继承了该类
        Azz o1 = new Czz();
        Bzz o2 = (Bzz)o1;
        o2.say();

        Bzz o3 = new Czz();
        o3.say();

        Czz o4 = new Czz();

        //Dzz o5 = (Dzz)new Czz();
        //Dzz o6 = (Dzz)o1;
        //Dzz o7 = (Dzz)o3;
        //Dzz o8 = (Dzz)o4;

        //派生类可以访问：超类的+派生类的，超类不能访问派生类的

        //instanceof

        //Dzz dzz = (Dzz)new Czz();


    }
}


class Azz{
    void say(){
        System.out.println("Azz");
    }

}

class Bzz extends Azz{
    void say(){
        System.out.println("Bzz");
    }

}

class Czz extends Bzz{
    void say(){
        System.out.println("Czz");
    }
}

class Dzz extends Czz{
    void say(){
        System.out.println("Dzz");
    }
}









